/**
 * Redis缓存管理控制器
 * 提供Redis服务器信息的查询功能，包括基本信息、键数量统计和内存使用情况
 */
package cc.mrbird.febs.system.controller;

import cc.mrbird.febs.common.domain.FebsResponse;
import cc.mrbird.febs.common.domain.RedisInfo;
import cc.mrbird.febs.common.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;

/**
 * @RestController: 标识这是一个REST风格的控制器
 * @RequestMapping("redis"): 指定该控制器的基础URL路径为/redis
 */
@RestController
@RequestMapping("redis")
public class RedisController {

    @Autowired
    private RedisService redisService;

    /**
     * 获取Redis服务器详细信息
     * 包括服务器版本、运行时间、连接数、内存使用等统计信息
     * @return 包含Redis详细信息的响应对象
     * @throws Exception 获取信息过程中的任何异常
     */
    @GetMapping("info")
    public FebsResponse getRedisInfo() throws Exception {
        List<RedisInfo> infoList = this.redisService.getRedisInfo();
        return new FebsResponse().data(infoList);
    }

    /**
     * 获取Redis数据库中键的数量统计信息
     * 包括不同类型键的数量统计
     * @return 包含键数量统计的Map
     * @throws Exception 获取统计信息过程中的任何异常
     */
    @GetMapping("keysSize")
    public Map<String, Object> getKeysSize() throws Exception {
        return redisService.getKeysSize();
    }

    /**
     * 获取Redis内存使用情况
     * 包括已用内存、内存碎片率等内存相关统计信息
     * @return 包含内存使用信息的Map
     * @throws Exception 获取内存信息过程中的任何异常
     */
    @GetMapping("memoryInfo")
    public Map<String, Object> getMemoryInfo() throws Exception {
        return redisService.getMemoryInfo();
    }
}
